#!/bin/bash
# 脚本作用 清理部署jar包，仅保留最近一次部署的文件

jar_directory="/e/Temp/jars"
name_arr=()
ts_arr=()

# 获取服务索引
function get_index() {
  case "$1" in
  "service-a")
  echo 1
  ;;
  "service-b")
  echo 2
  ;;
  "service-c")
  echo 3
  ;;
  *)
  echo 200
  ;;
  esac
}

# 删除或保留
function delete_or_keep() {
  for str in $1
  do
    # 按符号截取 截取字符串左边
    service_name=${str%%_*}
    index=$(get_index "$service_name")
    if [ "$index" -gt 100 ]
    then
      echo "unknown jar $str"
    # 判断文件名是否包含下划线
    elif [[ ${str} != *_* ]]
    then
      echo "not deployed jar $str"
    else
      # 按符号截取 截取字符串右边
      datetime_str=${str##*_}
      # 按位置截取
      date_str=${datetime_str:0:8}
      hour_minute=${datetime_str:8:4}
      # 日期转时间戳 yyyyMMdd HHmm
      ts=$(date -d "$date_str $hour_minute" +%s)
      old_ts=${ts_arr[$index]}
      # 不存在则放入
      if [ ${#old_ts} -eq 0 ]
      then
        ts_arr[$index]=$ts
        name_arr[$index]=$str
        echo "keep $str"
      # 取时间戳最新的
      elif [ "$ts" -gt "$old_ts" ]
      then
        old_name=${name_arr[$index]}
        ts_arr[$index]=$ts
        name_arr[$index]=$str
        echo "keep $str"
        echo "delete $old_name"
        rm -f "${jar_directory}/${old_name}"
      else
        echo "delete $str"
        rm -f "${jar_directory}/${str}"
      fi
    fi
  done
}

cut_start=${#jar_directory}
# +2 是因为多了个目录后缀/且cut计算是从1开始
cut_start=$(( "$cut_start" + 2))
# 执行
delete_or_keep "$(find ${jar_directory} -name "*.jar" | cut -c ${cut_start}-)"
# 不使用下面的是因为语法不推荐ls | grep的用法，也不推荐ls $｛jar_directory｝/*.jar通配符
# delete_or_keep "$(ls -1 $jar_directory | grep .jar | awk '{print $1}')"